#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
滑块控制模块
负责处理与视频进度滑块相关的操作
"""

import cv2
from PySide6.QtCore import Qt
from src.config import Config


class SliderControls:
    """滑块控制器类"""

    def __init__(self):
        """初始化滑块控制器"""
        pass

    def on_slider_pressed(self, main_window):
        """
        滑块按下事件处理
        
        当用户按下进度滑块时暂停视频播放，以便用户可以拖动滑块到指定位置。
        
        Args:
            main_window (VideoStitcherMainWindow): 主窗口实例
        """
        # 记录播放状态，但不改变FFmpeg播放器状态
        main_window._was_playing_before_seek = main_window.is_playing

    def on_slider_released(self, main_window):
        """
        滑块释放事件处理
        
        当用户释放进度滑块时，跳转到指定位置并恢复播放（如果之前在播放）。
        
        Args:
            main_window (VideoStitcherMainWindow): 主窗口实例
        """
        if main_window.ffmpeg_player.video_path:
            # 计算新的时间位置
            slider_value = main_window.progress_slider.value()
            duration = main_window.ffmpeg_player.get_duration()
            new_time = (slider_value / 1000.0) * duration
            
            # 使用FFmpeg播放器跳转
            main_window.ffmpeg_player.seek(new_time)
            
            # 如果之前在播放，则恢复播放
            if getattr(main_window, '_was_playing_before_seek', False):
                main_window.ffmpeg_player.play()
                main_window.is_playing = True
                main_window.play_pause_button.setText(Config.PAUSE_BUTTON_TEXT)

    def on_slider_value_changed(self, main_window, value):
        """
        滑块值改变事件处理
        
        当用户拖动进度滑块时实时更新时间显示。
        
        Args:
            main_window (VideoStitcherMainWindow): 主窗口实例
            value (int): 滑块的新值
        """
        if main_window.ffmpeg_player.video_path:
            # 实时更新时间显示（仅在拖拽时）
            duration = main_window.ffmpeg_player.get_duration()
            current_time = (value / 1000.0) * duration
            main_window.update_time_display(current_time, duration)